|
900612 ESP -- SURF Center : Investigations into Automated Image Analysis
This page last changed on Jun 07, 2011 by brian.
Steps Required for Automated Image Analysis
See also: Applying Fiducial Marks
Example ImageFor this document I will be using this image as my filter sample: Spot SegmentationIn order to identify the spots on the filter image I tried the following: Remove areas outside the filter boundaries from the filter analysis.
Apply a thresholding technique to locate spots.
Extracting Spot LocationsOnce a mask has been created it's relatively easy to 'extract' the spot location. For my analysis, I searched each spot, as defined by the mask, for the brightest 3x3 pixel block within the spot and used that as the spot location. This is useful for attempting to apply point-matching algorithms. ImagePlus ip; // see above code for generating ROI image GeneArrayAnalysisService gaas = new org.mbari.esp.imaging.services.impl.GeneArrayAnalysisServiceImpl01(); /* * Key = unique, but arbitrary, spot ID * Value = x,y location of upper left corner of mean block. z is mean intensity of 3x3 block */ Map<Integer, Point3D<Double>> pointMap = gaas.extractIntensities(ip, 3); GAL Feature ExtractionAbout GAL FilesGene-array Layout Files (GAL) define the spots to be printed onto the filter by a piezzo-electric printer. A single GAL file defines multiple filters.
GeneArrayIOService io = new org.mbari.esp.imaging.services.impl.GeneArrayIOServiceImpl(); List<GALPoint> points = io.read((new File('my_gal.txt')).toURI().toURL()); BufferedImage image = PiezzoArrayUtil.arrayToColorGrid(points, true, 100); ImageIO.write(image, "png", new File("my_gal.png")); Isolating a Single Filter from the GAL pointsWith a little apriori knowledge, this is pretty simple. Since there is a relatively large spacing between filters, I just create a spot defining the upper left corner (e.g. minimum x and y value of all points), define a box of a certain size (in our case I'm using 12500 units) and remove everything outside the box. List<GALPoint> allFilters = io.read((new File('my_gal.txt')).toURI().toURL());
List<GALPoint> oneFilter = PiezzoUtilities.filterSingleSpot(allFilters, 12500);
Pattern MatchingAt this point we have 3 important things:
There are a number of techniques for pattern matching. A few that I've explored are described below: Log-polar transformation.ReferencesEvaluationAt first brush, this seems the ideal technique for image registration. It handles rigid transformations involving scaling, rotation, and translation. In order to use this technique I generated an ideal image of the GAL points and attempted to align that with the filter image. For the test image, I was able modify the transform to accuratly align rotation and give relatively good translation. However I was never able to get the image to scale correctly. This is in part due to the similarity of the patterns used in the image. The log-polar transform would create a peak correlation on the wrong patterns between the image. It should also be noted that other test images produced widely varying results. So I do not consider the technique reliable, although with more time, it may be possible to improve upon it.
Fourier-Mellin TransformThis is essentially a log-polar transform in Fourier space. I did not have time to pursue it. Robust Point Set Registration Using Mixture of GaussiansReferenceshttp://code.google.com/p/gmmreg/ EvaluationThis is a point set registration technique, so instead of attempting to align images, we are trying to match to different sets of points. This technique allows for both rigid and non-rigid point-set registration, although, in our case, we are only interested in rigid registration. (Non-rigid registration warps the points to fit, which we do not want) I ran the open-source code on our data samples and did not have any luck. I also passed the data on to the author, Bing Jian of this technique. He also was not succesful with the registration. His comments were:
Data ExtractionWithout being able to align the filter image with the GAL points, it's impossible to:
Here's a few examples of just trying to extract spots from an image:
SummaryThe only hurdle that needs to be overcome at this point is pattern matching/image registration Here are the signficant hurdles for pattern matching/image regsitration:
Applying Fiducial Marks for Image AnalysisIf the ESP arrays had distinct fiducial marks it should be possible to locate these marks and use them for scaling and rotation of the GAL to match the array image. Ideally these fiducial's should be either the closest points to the center of mass of the or the farthest points from the center of mass. Applying Fiducials.
|
| Document generated by Confluence on Feb 03, 2026 14:16 |